﻿namespace Zj.Blog.Repository
{
    using System;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity;
    using System.Linq;
    using Zj.Blog.Domain.Core;

    public class BlogDbContext : DbContext
    {
        //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
        //使用“CodeFirstDb”连接字符串。默认情况下，此连接字符串针对您的 LocalDb 实例上的
        //“Zj.Blog.Repository.CodeFirstDb”数据库。
        // 
        //如果您想要针对其他数据库和/或数据库提供程序，请在应用程序配置文件中修改“CodeFirstDb”
        //连接字符串。
        static BlogDbContext()
        {
            Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<BlogDbContext>());
        }
        public BlogDbContext()
            : base("name=CodeFirstDb")
        {

        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Types().Configure(t => t.ToTable(t.ClrType.Name));/*配置数据库表名为实体名*/

            modelBuilder.Properties().Where(p => p.Name.Equals("Id", StringComparison.OrdinalIgnoreCase))
                .Configure(p => p.IsKey());

            modelBuilder.Entity<User>()
                .HasKey(t => t.Id)
                .Map(t=> t.ToTable("User"))
                .Property(p=>p.Timestamp).IsRowVersion()
                .IsRequired();/*设置主键*/
        }

        //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First  模型
        //的详细信息，请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。

        //public virtual DbSet<Blog> Blog { get; set; }
        //public virtual DbSet<Article> Article { get; set; }
        public virtual DbSet<Tag> Tag { get; set; }
        public virtual DbSet<Article> Article { get; set; }
        public virtual DbSet<Blog> Blog { get; set; }
        public virtual DbSet<User> User { get; set; }
        public virtual DbSet<Company> Company { get; set; }

        public virtual DbSet<Menu> Menu { get; set; }
        public virtual DbSet<UserMenuMapping> UserMenuMapping { get; set; }
    }

}